package com.linkgie.galaxyframework.blockchain;

import cn.linkfo.blockchain.service.BlockchainQuery;
import cn.linkfo.blockchain.service.TransactionReceipt;
import cn.linkfo.crypto.CryptoKeypair;

public interface BlockchainTemplate {

	/**
	 * 关联的账本；
	 * 
	 * @return
	 */
	String getLedgerCode();

	/**
	 * 查询;
	 * 
	 * @return
	 */
	BlockchainQuery query();

	/**
	 * 立即执行交易；
	 * <p>
	 * 
	 * 此方法采用上下文定义的签名处理器 {@link SigningProcess} ；
	 * 
	 * @param statementBuilder 交易指令生成器；函数调用此接口以生成交易的具体内容；
	 * 
	 * @return
	 */
	TransactionReceipt executeTransaction(TransactionStatementBuilder statementBuilder);

	/**
	 * 立即执行交易；
	 * <p>
	 * 
	 * 此方法采用参数指定的密钥签署交易，忽略由上下文定义的签名处理器 {@link SigningProcess} ；
	 * 
	 * @param statementBuilder 交易指令生成器；函数调用此接口以生成交易的具体内容；
	 * @param signerKeys       签署交易的密钥清单；
	 * @return
	 */
	TransactionReceipt executeTransaction(TransactionStatementBuilder statementBuilder, CryptoKeypair... signerKeys);

}
